package com.mtoolkit.util;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 判断给定的资源是否为空的帮助类。
 * 
 * @author michael
 * @version $Id: EmptyUtil.java, v 0.1 2012-9-26 下午1:58:21 michael Exp $
 */
public class EmptyUtil {

    /**
     * 私有构造器，不允许构造此工具类的实例。
     */
    private EmptyUtil() {
    }

    /**
     * 判断给定字符串是否为null或者空字符。
     * 当且仅当给定的字符串为null或者空字符时，返回true。
     * @param source 源字符串。
     * @return 给定的字符串是否为null或者空字符。
     *  <code>true</code>代表为null或者空字符，<code>false</code>代表不为null且不为空字符。
     */
    public static boolean isNullEmpty(String source) {
        return source == null || source.trim().isEmpty();
    }
    public static boolean isNotNullEmpty(String source) {
    	return source != null && !source.trim().isEmpty();
    }

    /**
     * 判断给定的List列表是否为null或者空列表。
     * 当且仅当给定的List列表为null或者空列表时，返回true。
     * @param source 源List列表。
     * @return 给定的List列表是否为null或者空列表。
     *  <code>true</code>代表为null或者空列表，<code>false</code>代表不为null且不为空列表。
     */
    public static boolean isNullEmpty(List<?> source) {
        return source == null || source.isEmpty();
    }
    public static boolean isNotNullEmpty(List<?> source) {
        return source != null && !source.isEmpty();
    }

    /**
     * 判断给定的Set列表是否为null或者空列表。
     * 当且仅当给定的Set列表为null或者空列表时，返回true。
     * @param source 源Set列表。
     * @return 给定的Set列表是否为null或者空列表。
     *  <code>true</code>代表为null或者空列表，<code>false</code>代表不为null且不为空列表。
     */
    public static boolean isNullEmpty(Set<?> source) {
        return source == null || source.isEmpty();
    }
    public static boolean isNotNullEmpty(Set<?> source) {
        return source != null && !source.isEmpty();
    }

    /**
     * 判断给定的Map集合是否为null或者空集合。
     * 当且仅当给定的Map集合为null或者空集合时，返回true。
     * @param source 源Map集合。
     * @return 给定的Map集合是否为null或者空集合。
     *  <code>true</code>代表为null或者空集合，<code>false</code>代表不为null且不为空集合。
     */
    public static boolean isNullEmpty(Map<?, ?> source) {
        return source == null || source.isEmpty();
    }
    public static boolean isNotNullEmpty(Map<?, ?> source) {
        return source != null && !source.isEmpty();
    }

    /**
     * 判断给定的对象数组是否为null或者长度为0。
     * 当且仅当给定的数组为null或者长度为0时，返回true。
     * @param source 源数组。
     * @return 给定的对象数组是否为null或者长度为0。
     *  <code>true</code>代表为null或者长度为0，<code>false</code>代表不为null且长度不为0。
     */
    public static boolean isNullEmpty(Object[] source) {
        return source == null || source.length == 0;
    }
    public static boolean isNotNullEmpty(Object[] source) {
        return source != null && source.length > 0;
    }

    /**
     * 判断给定的Class数组是否为null或者长度为0。
     * 当且仅当给定的数组为null或者长度为0时，返回true。
     * @param source 源数组。
     * @return 给定的Class数组是否为null或者长度为0。
     *  <code>true</code>代表为null或者长度为0，<code>false</code>代表不为null且长度不为0。
     */
    public static boolean isNullEmpty(Class<?>[] source) {
        return source == null || source.length == 0;
    }
    public static boolean isNotNullEmpty(Class<?>[] source) {
        return source != null && source.length > 0;
    }

    /**
     * 判断给定的boolean数组是否为null或者长度为0。
     * 当且仅当给定的数组为null或者长度为0时，返回true。
     * @param source 源数组。
     * @return 给定的boolean数组是否为null或者长度为0。
     *  <code>true</code>代表为null或者长度为0，<code>false</code>代表不为null且长度不为0。
     */
    public static boolean isNullEmpty(boolean[] source) {
        return source == null || source.length == 0;
    }
    public static boolean isNotNullEmpty(boolean[] source) {
        return source != null && source.length > 0;
    }

    /**
     * 判断给定的byte数组是否为null或者长度为0。
     * 当且仅当给定的数组为null或者长度为0时，返回true。
     * @param source 源数组。
     * @return 给定的byte数组是否为null或者长度为0。
     *  <code>true</code>代表为null或者长度为0，<code>false</code>代表不为null且长度不为0。
     */
    public static boolean isNullEmpty(byte[] source) {
        return source == null || source.length == 0;
    }
    public static boolean isNotNullEmpty(byte[] source) {
        return source != null && source.length > 0;
    }

    /**
     * 判断给定的char数组是否为null或者长度为0。
     * 当且仅当给定的数组为null或者长度为0时，返回true。
     * @param source 源数组。
     * @return 给定的char数组是否为null或者长度为0。
     *  <code>true</code>代表为null或者长度为0，<code>false</code>代表不为null且长度不为0。
     */
    public static boolean isNullEmpty(char[] source) {
        return source == null || source.length == 0;
    }
    public static boolean isNotNullEmpty(char[] source) {
        return source != null && source.length > 0;
    }

    /**
     * 判断给定的double数组是否为null或者长度为0。
     * 当且仅当给定的数组为null或者长度为0时，返回true。
     * @param source 源数组。
     * @return 给定的double数组是否为null或者长度为0。
     *  <code>true</code>代表为null或者长度为0，<code>false</code>代表不为null且长度不为0。
     */
    public static boolean isNullEmpty(double[] source) {
        return source == null || source.length == 0;
    }
    public static boolean isNotNullEmpty(double[] source) {
        return source != null && source.length > 0;
    }

    /**
     * 判断给定的float数组是否为null或者长度为0。
     * 当且仅当给定的数组为null或者长度为0时，返回true。
     * @param source 源数组。
     * @return 给定的float数组是否为null或者长度为0。
     *  <code>true</code>代表为null或者长度为0，<code>false</code>代表不为null且长度不为0。
     */
    public static boolean isNullEmpty(float[] source) {
        return source == null || source.length == 0;
    }
    public static boolean isNotNullEmpty(float[] source) {
        return source != null && source.length > 0;
    }
    
    /**
     * 判断给定的long数组是否为null或者长度为0。
     * 当且仅当给定的数组为null或者长度为0时，返回true。
     * @param source 源数组。
     * @return 给定的long数组是否为null或者长度为0。
     *  <code>true</code>代表为null或者长度为0，<code>false</code>代表不为null且长度不为0。
     */
    public static boolean isNullEmpty(long[] source) {
        return source == null || source.length == 0;
    }
    public static boolean isNotNullEmpty(long[] source) {
        return source != null && source.length > 0;
    }

    /**
     * 判断给定的int数组是否为null或者长度为0。
     * 当且仅当给定的数组为null或者长度为0时，返回true。
     * @param source 源数组。
     * @return 给定的int数组是否为null或者长度为0。
     *  <code>true</code>代表为null或者长度为0，<code>false</code>代表不为null且长度不为0。
     */
    public static boolean isNullEmpty(int[] source) {
        return source == null || source.length == 0;
    }
    public static boolean isNotNullEmpty(int[] source) {
        return source != null && source.length > 0;
    }
    
    /**
     * 判断给定的short数组是否为null或者长度为0。
     * 当且仅当给定的数组为null或者长度为0时，返回true。
     * @param source 源数组。
     * @return 给定的short数组是否为null或者长度为0。
     *  <code>true</code>代表为null或者长度为0，<code>false</code>代表不为null且长度不为0。
     */
    public static boolean isNullEmpty(short[] source) {
        return source == null || source.length == 0;
    }
    public static boolean isNotNullEmpty(short[] source) {
        return source != null && source.length > 0;
    }
    
}
